首页
下载应用
提交文章
关于我们
🔥 热搜 🔥
1
百度
2
今日热点
3
微信公众平台
4
贴吧
5
opgg
6
dnf私服
7
百度贴吧
8
知乎
9
dnf公益服
10
百度傻逼
分类
社会
娱乐
国际
人权
科技
经济
其它
首页
下载应用
提交文章
关于我们
🔥
热搜
🔥
1
百度
2
今日热点
3
微信公众平台
4
贴吧
5
opgg
6
dnf私服
7
百度贴吧
8
知乎
9
dnf公益服
10
百度傻逼
分类
社会
娱乐
国际
人权
科技
经济
其它
大摩宏观策略谈:2025中美变局展望
假设,你遇到麦琳怎么办?
董事长两口子不干了,至暗时刻谁是白衣骑士
2024年心理咨询师报名通道开启!可考心理证书,无需辞职,名额有限,11月30日截止报名!!!
穿了跟没穿一样,胸型赞到爆!天然乳胶,性感到让男人腿软!
生成图片,分享到微信朋友圈
查看原文
其他
微生物组学数据中的污染物的识别与去除 | 微生物专题
Original
运维部—LSH
联川生物
2022-05-21
收录于合集 #微生物
300个
在测序过程中扩增得到的有些DNA序列实际并没有真正出现在样本中,污染可能包括方方面面,例如测序反应中使用的试剂、实验操作问题等,可能干扰下游分析,错误的扩大了样本的多样性,影响了数据的准确性,掩盖了正常的数据。虽然适当的实验室操作可以减少污染,但不能消除污染。
这里我们介绍Decontam (https://github.com/benjjneb/decontam)。它是一个开源R包,通过统计分类过程来识别污染物和去除污染的DNA序列,提高测序结果的质量。
原理:
1. 污染物在低浓度样品中出现频率较高;
2. 污染物出现在阴性对照品中出现频率较高
数据准备:
1. 特征表:每个样本(行)中序列特征(列)的相对丰度表;这些“序列特征”可以是各种各样的特征类型中的任何一种,包括扩增子序列变体(ASVs)、操作分类单元(OTUs)、物种分类等。
2. 用于获得污染参考的数据,以下二选一
(1)DNA quantitation data:包含每个样品中DNA浓度的DNA定量数据文本。
(2)negative control:特征标中存在没有添加任何生物样本的空白上进行测序的样本数据。值得注意的是阴性控制也应通过PCR步骤进行,因为工作流程中的每一步都有可能引入新的污染物。
具体步骤:
1. Setting up
先导入R包及表格
library(phyloseq)library(ggplot2)library(decontam)
ps <- readRDS(system.file("extdata", "MUClite.rds", package="decontam"))
Ps
## phyloseq-class experiment-level object
## otu_table() OTU Table: [ 1951 taxa and 569 samples ]
## sample_data() Sample Data: [ 569 samples by 6 sample variables ]
## tax_table() Taxonomy Table: [ 1951 taxa by 6 taxonomic ranks ]
quant_reading:通过荧光强度测量每个样本中的DNA浓度,
Sample_or_Control:阴性对照情况说明。
head(sample_data(ps))
## X.SampleID quant_reading Sample_or_Control
## P1101C01701R00 P1101C01701R00 2829 True Sample
## P1101C01702R00 P1101C01702R00 5808 True Sample
## P1101C01703R00 P1101C01703R00 5052 True Sample
## P1101C08701R00 P1101C08701R00 1227 True Sample
## P1101C08702R00 P1101C08702R00 3872 True Sample
## P1101C08703R00 P1101C08703R00 5872 True Sample
2.Identify Contaminants - Frequency
2.1 方法一 “frequency”method
该方法利用每个序列特征的频率分布作为输入DNA浓度的函数来识别污染物。
在我们的phyloseq对象中,”quant_reading”一列的记录DNA浓度信息
head(sample_data(ps))
## X.SampleID quant_reading Sample_or_Control
## P1101C01701R00 P1101C01701R00 2829 True Sample
## P1101C01702R00 P1101C01702R00 5808 True Sample
## P1101C01703R00 P1101C01703R00 5052 True Sample
## P1101C08701R00 P1101C08701R00 1227 True Sample
## P1101C08702R00 P1101C08702R00 3872 True Sample
## P1101C08703R00 P1101C08703R00 5872 True Sample
使用isContaminant函数进行污染物的识别,method填写为frequency。
p列表示属于污染物分类的概率,
contaminantl 列的 TRUE/FALSE表示序列特征是污染物的统计值是否超过了用户可设置的阈值,如果为True认为该特征序列为污染物序列(默认阈值为0.1)。
contamdf.freq <- isContaminant(ps, method=
"frequency",
conc=
"quant_reading")
head(contamdf.freq)
## freq prev p.freq p.prev p contaminant
## Seq1 0.323002694 549 1.000000e+00 NA 1.000000e+00 FALSE
## Seq2 0.098667396 538 1.000000e+00 NA 1.000000e+00 FALSE
## Seq3 0.003551358 160 1.135975e-18 NA 1.135975e-18 TRUE
## Seq4 0.067588419 519 9.999998e-01 NA 9.999998e-01 FALSE
## Seq5 0.045174743 354 1.000000e+00 NA 1.000000e+00 FALSE
## Seq6 0.040417101 538 1.000000e+00 NA 1.000000e+00 FALSE
1901条序列中有58条被认为是污染序列
table(contamdf.freq$contaminant)
## ## FALSE TRUE
## 1893 58
下图给我们可视化呈现了非污染序列Seq1与污染序列Seq3的区别.
在这个图中,横坐标表示DNA浓度,纵坐标表示特征序列的频率。黑色虚线显示了一个非污染序列特征的模型,该特征的频率预计与输入的DNA浓度无关。红线表示的是一个污染物序列特征的模型,该特征的频率预计与输入DNA浓度成反比,因为在DNA总量很少的样本中,受污染的DNA将占总DNA的更大比例。很明显,Seq3非常适合红色污染物模型,而Seq1不适合。
plot_frequency(ps, taxa_names(ps)[c(1,3)], conc="quant_reading") + xlab(
"DNA Concentration (PicoGreen fluorescent intensity)"
)
把它们从phyloseq对象中移除
ps.noncontam <- prune_taxa(!contamdf.freq$contaminant, ps)
ps.noncontam
## phyloseq-class experiment-level object
## otu_table() OTU Table: [ 1893 taxa and 569 samples ]
## sample_data() Sample Data: [ 569 samples by 6 sample variables ]
## tax_table() Taxonomy Table: [ 1893 taxa by 6 taxonomic ranks ]
2.2 方法二 “prevalence” method
在这种方法中,将真阳性样本中各序列特征与阴性对照中的比率进行比较,以确定污染物。
在我们的phyloseq对象中,“Sample_or_Control”是包含阴性样本的信息,Control Sample表示阴性样本,True Sample表示阳性样本。
head(sample_data(ps))
## X.SampleID quant_reading Sample_or_Control
## P1101C01701R00 P1101C01701R00 2829 True Sample
## P1101C01702R00 P1101C01702R00 5808 True Sample
## P1101C01703R00 P1101C01703R00 5052 True Sample
## P1101C08701R00 P1101C08701R00 1227 True Sample
sample_data(ps)$is.neg <- sample_data(ps)$Sample_or_Control ==
"Control Sample"
使用isContaminant函数进行污染物的识别,method填写为prevalence。
contamdf.prev <- isContaminant(ps, method=
"prevalence"
, neg=
"is.neg"
)
这种方法识别出的污染序列数量为124,比第一种的方法识别出的污染物数量为58要多,但漏掉了污染物Seq3,主要是因为Seq3几乎存在于阴性和阳性等所有样本中。
table(contamdf.prev$contaminant)
## FALSE TRUE ## 1827 124
与第一种方法一样,污染物的识别默认阈值是0.1的概率,我们可以选择尝试将threshold改成0.5。
contamdf.prev05 <- isContaminant(ps, method=
"prevalence"
, neg=
"is.neg"
, threshold=
0.5
)
此时,识别出的污染序列数量增加至142个
table(contamdf.prev05$contaminant)
## ## FALSE TRUE ## 1809 142
可视化展示下序列在阴性对照和阳性样本中被观察到的次数,看看这个分类阈值是否可行。
ps.pa <- transform_sample_counts(ps,
function
(abund) 1*(abund>0))
ps.pa.neg <- prune_samples(sample_data(ps.pa)$Sample_or_Control ==
"Control Sample"
, ps.pa)
ps.pa.pos <- prune_samples(sample_data(ps.pa)$Sample_or_Control ==
"True Sample"
, ps.pa)
df.pa <- data.frame(pa.pos=taxa_sums(ps.pa.pos), pa.neg=taxa_sums(ps.pa.neg), contaminant=contamdf.prev$contaminant)
ggplot(data=df.pa, aes(x=pa.neg, y=pa.pos, color=contaminant)) + geom_point() + xlab(
"Prevalence (Negative Controls)"
) + ylab(
"Prevalence
(True Samples)"
)
样本分成了两个分支,一个分支主要出现在阳性样本中,另一个分支主要出现在阴性对照中。看来默认概率阈值在识别阴性对照中的污染物方面也已经做得很好了。
参考文献:
Simple statistical identification and removal of contaminant sequences in marker-gene and metagenomics data Davis et al. Microbiome (2018) 6:226
http://www.bioconductor.org/packages/release/bioc/vignettes/decontam/inst/doc/decontam_intro.html
相关阅读
关于微生物研究的十问十答 | 学习专栏
微生物基因组数据上传指南 | 云课堂(16)
专访浙江工商大学肠道微生物消化课题组,发文经验大揭秘
【案例解析】芬苯达唑和伊维菌素片对东北虎肠道微生物群落和粪便代谢表型的影响 | 用户文章
一文了解菌群在胃肠道不同部位的分布特征 | 微生物专题
肠道菌群与疾病因果性的研究策略 | 微生物专题
您可能也对以下帖子感兴趣
{{{title}}}
文章有问题?点此查看未经处理的缓存